// 定义用户相关的仓库
import { defineStore } from "pinia";
// 引入获取验证码的请求方法
import {reqCode, reqUserlogin} from "../../api/hospital/index"
import type {loginData,UserLoginResponseData,UserState,UserInfo} from '../../api/hospital/type'
import { SET_TOKEN, GET_TOKEN, REMOVE_TOKEN } from "../../utils/user";
const useUserStore = defineStore('User',{
    state: ():UserState=> {
        
        return{
            visiable:false,//用于控制登录组件的dialog显示与隐藏
            code:'',//存储用户验证码
            userInfo:JSON.parse(GET_TOKEN() as string) || {}
        }
    },
    actions:{
        // 获取验证码方法
        async getCode(phone:string){
            // 在想服务器携带手机号码，获取验证码
             let result:any = await reqCode(phone);
            console.log(result);      
        },
        // 用户手机号码登录方法
        async userLogin(loginData:loginData){
            // 登录请求
            let result:UserLoginResponseData = await reqUserlogin(loginData);
            if (result.code == 200){
                this.userInfo = result.data;
                // 本地存储持久化存储用户信息
                SET_TOKEN(JSON.stringify(this.userInfo));
                // 返回一个成功的Promise
                return 'ok';
            }else{
                return Promise.reject(new Error(result.message));
            }     
        },
        // 退出登陆方法
        logout(){
            // 清空仓库数据
            this.userInfo = { name:'',token:''};
            // 清空本地存储数据
            REMOVE_TOKEN();
        },
        queryState(){
            let timer = setInterval(()=>{
                if(GET_TOKEN()){
                    this.visiable = false;
                    this.userInfo = JSON.parse(GET_TOKEN() as string);
                    clearInterval(timer);
                }
            },1000)
        }
    },
    getters:{

    }
});
// 获取仓库的方法对外暴露
export default useUserStore;